package com.cskaoyan.javase.network._1udp._v3;

import com.cskaoyan.javase.network.util.UDPNetworkUtils;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.Scanner;

/**
 * 发送端接收端相互发送字符串消息
 * 先不用多线程,用单线程的程序实现
 * 这时发送端和接收端都互相发送消息,接收消息,大家都发送,大家都接收
 * 给定第一个发送者:
 * FirstSender
 * 第一个接收者:
 * FirstReceiver
 *
 * @since 11:42
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class FirstSender {
    public static void main(String[] args) throws IOException {
        // 作为第一次发送端,这时的数据消息来源是键盘录入
        // 键盘录入,而且是在循环循环中做键盘录入
        // 发送消息-创建Socket,创建数据报包,send
        Scanner sc = new Scanner(System.in);
        // 这里socket是作为发送端和接收端两种形式存在的,所以必须指明端口号,这个端口号是监听其余进程发送数据报包的端口号
        DatagramSocket socket = new DatagramSocket(6666);
        while (true) {
            // 阻塞方法
            String msg = sc.nextLine();
            DatagramPacket sendPacket = UDPNetworkUtils.getSendPacket(msg, "127.0.0.1", 7777);
            socket.send(sendPacket);

            // 下面实现接收消息的功能
            // 随后还需要实现接收端的功能,发送一次数据,就来接收一次数据
            // 直接共用发送消息的Socket对象,获取对方发送来的数据报包,receive,解析
            DatagramPacket receiverPacket = UDPNetworkUtils.getReceiverPacket();
            socket.receive(receiverPacket);
            System.out.println(UDPNetworkUtils.parsePacket(receiverPacket));
        }
    }
}
